﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//fwrite()
//原型： size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
//将ptr指向的数据块中的内容以二进制的形式写入到stream指向的流中。
//size_t size:指每个数据项的大小（以字节为单位）
//size_t count:指要写入stream指向的流中的数据项的数量
//返回值：返回实际写入到流中的数据项的数量，如果发生错误，则可能小于count
struct stu
{
	char name[20];
	int age;
	float score;
};
int main()
{
	struct stu s = { "zhangsan",18,95.5 };
	FILE* pf = fopen("date.txt", "wb");//只写，为了输出数据，打开一个二进制文件，如果文件不存在则新建一个文件
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fwrite(&s, sizeof(struct stu), 1, pf);
	fclose(pf);
	pf = NULL;
	return 0;
}

//fread()
//原型：size_t fread(void * ptr,size_t size,size_t count, FILE * stream);
//函数⽤于从stream指向的⽂件流中读取数据块，并将其存储到ptr指向的内存缓冲区中。
//返回实际读取的数据块数量。
struct stu
{
	char name[20];
	int age;
	float score;
};
int main()
{
	struct stu s;
	FILE* pf = fopen("date.txt", "rb");//只读，为了输入数据，打开一个二进制文件，如果文件不存在则报错
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	int ret = fread(&s, sizeof(struct stu), 1, pf);//假设在fwrite()学习时在文件中写入了信息
	printf("%s %d %f\n", s.name, s.age, s.score);
	printf("%d", ret);
	fclose(pf);
	pf = NULL;
	return 0;
}
